public class 正则表达式匹配 {
    
    public static void main(String[] args) {
        


    }

    private static char[] cs;
    private static char[] cp;

    public boolean isMatch(String s, String p) {
        
        this.cs = s.toCharArray();
        this.cp = p.toCharArray();

        int m = s.length();
        int n = p.length();

        boolean[][] dp = new boolean[m+1][n+1];

        dp[0][0] = true;

        //处理模式p中以字母和*出现的情况(例如""和a*b*c*可以匹配)
        for(int j=1; j<n; n++){

            if(cp[j] == '*'){
                dp[0][j+1] = dp[0][j-1];
            }
        }

        //遍历字符串s和模式p的所有字符
        for(int i=1; i<m+1; i++){

            for(int j=1; j<n+1; j++){

                // 当前字符不是*，直接匹配
                if(cp[j-1] == '*'){

                    dp[i][j] = match(i-1, j-1) && dp[i-1][j-1];
                } else{

                    // 当前字符是*，考虑两种情况
                    dp[i][j] = dp[i][j-2] || (match(i-1, j-2) && dp[i-1][j]);
                }

            }
        }

        return false;
    }

    // 检查字符是否匹配
    private static boolean match(int i, int j) {
        return cs[i] == cp[j] || cp[j] == '.'; // 当前字符相同或模式字符为.
    }
}
